<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>fuse.js</title>
</head>

<body>
<a href="https://fusejs.io/api/options.html">fuse.js</a>
<a href="https://github.com/krisk/Fuse">fuse.js github</a>
<a href="https://www.jianshu.com/p/44e8edb4c404">fuse.js 简书</a>
<a href="https://gitee.com/mirrors/fuse">gitte </a>
</body>
<script src="https://cdn.jsdelivr.net/npm/fuse.js/dist/fuse.js"></script>
<script>
    function setCollection() {
        console.log('setCollection start')
        const fruits = ['apple', 'orange']
        const fuse = new Fuse(fruits)
        console.log(JSON.parse(JSON.stringify(fuse)));
        const r = fuse.setCollection(['banana', 'pear'])
        console.log(fuse)
        console.log(fruits)
        console.log(r)
        console.log('setCollection end')
    }

    function search (){
        console.log('search start');
        const list = ["Old Man's War", "The Lock Artist"]
        const options = {
            includeScore: false
        }

        const fuse = new Fuse(list, options)

        const result = fuse.search('od man')

        console.log(result);
        console.log('search end')
    }

    function optionFun () {
        const option = {
            isCaseSensitive: false, //指示比较是否应区分大小写。
            includeScore: false, // 分数是否应该包含在结果集中。0分表示完美匹配，而1分表示完全不匹配。
            includeMatches: false, // 匹配是否应该包含在结果集中。当为true时，结果集中的每条记录都将包括匹配字符的索引。因此，这些可用于突出目的。
            minMatchCharLength: 1, // 仅返回长度超过此值的匹配项。（例如，如果您想在结果中忽略单个字符匹配，请将其设置为2）。
            shouldSort: true, // 是否按分数对结果列表进行排序。
            findAllMatches: false, // 当为true时，即使字符串中已经找到了完美匹配，匹配函数仍将持续到搜索模式的末尾。
            keys: ['label', 'children.label','children.children.label'], // 将要搜索的密钥列表。这支持嵌套路径、加权搜索、字符串和对象数组中的搜索。
            location: 0, // 确定文本中预期找到的模式大致位置。
            threshold: 0.1, // 匹配算法在什么时候放弃了。0.0的阈值需要（字母和位置）的完美匹配，1.0的阈值将匹配任何东西。
            distance: 100,
            ignoreLocation: false, // 当为true时，搜索将忽略location和distance，因此模式在字符串中的位置并不重要。

            //  *：提示

             // 默认选项仅搜索前60个字符。如果合理地预期比赛在这个范围内，这应该足够了。要修改此行为，请设置location、threshold、distance（或ignoreLocation的适当组合

            // 高级配置
            useExtendedSearch: false,// 当为true时，它允许使用类unix的搜索命令。参见示例。
            // getFn: (obj: T, path: string | string[]) => string | string[] // 用于在提供的路径上检索对象值的函数。默认值还将搜索嵌套路径。

            // sortFn: (a, b) => number // 用于对所有结果进行排序的函数。默认值将按升序相关性分数、升序指数排序。

            ignoreFieldNorm: false, // 当为true时，相关性分数（用于排序）的计算将忽略字段长度范数。
            // :::tip 将 ignoreFieldNorm设置为true的唯一意义是，无论有多少项，而只是查询项存在。 :::

            fieldNormWeight: 1, // 确定字段长度规范对得分的影响程度。0的值相当于忽略字段长度范数。0.5的值将大大降低场长范数的影响，而2.0的值将大大增加它
        }

        const tree = [
            {
                label: "高一",
                children: [{
                    label: '高一一班',
                    children: [
                        {
                            label: '田语海'
                        }, {
                            label: '曾思娜'
                        },
                        {
                            label: '黎笑雯'
                        }, {
                            label: '贺英莉'
                        }, {
                            label: '江锌希'
                        }
                    ]
                }, {
                    label: '高一二班',
                    children: []
                }]
            },{
                label: "高二",
                children: [{
                    label: '高二一班',
                    children: [
                        {
                            label: '语海'
                        }, {
                            label: '思娜'
                        },
                        {
                            label: '黎雯'
                        }, {
                            label: '贺莉'
                        }, {
                            label: '明明'
                        }
                    ]
                }, {
                    label: '高二二班',
                    children: []
                }]
            }
        ]

        const fuse = new Fuse(tree, option);

        const res = fuse.search('明明')

        console.log(res)

    }

    function searchFun () {
        const books = [
            {
                title: "Old Man's War",
                author: {
                    firstName: 'John',
                    lastName: 'Scalzi'
                }
            },
            {
                title: 'The Lock Artist',
                author: {
                    firstName: 'Steve',
                    lastName: 'Hamilton'
                }
            }
        ]

        const fuse = new Fuse(books, {
            keys: ['title', 'author.firstName']
        })

        const res = fuse.search('jon')

        console.log(res);

    }

    window.onload = () => {
        optionFun()
    }
</script>
</html>
